<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Str;

// 创建保存 Tag 的验证规则（TagController.store() 方法内使用）
// php artisan make:request StoreTag
class StoreTag extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        // 如果 authorize 方法返回 false，则会自动返回一个包含 403 状态码的 HTTP 响应，也不会运行控制器的方法。
        // return false;
        // $comment = Comment::find($this->route('comment'));
        // return $comment && $this->user()->can('update', $comment);
        return true;
    }

    /**
     * 准备验证数据
     *
     * @return void
     */
    protected function prepareForValidation()
    {
        $this->merge([
            'name' => Str::slug($this->name),
        ]);
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name' => ['required','unique:tags','max:255'],
            'description' => ['required','max:255'],
        ];
    }

    /**
     * 获取已定义验证规则的错误消息
     *
     * @return array
     */
    public function messages()
    {
        return [
            'name.required' => ':attribute 不能为空 StoreTag',
            'name.unique' => ':attribute 已存在',
            'name.max' => ':attribute 过长',
            'description.required'  => ':attribute 不能为空 StoreTag',
            'description.max'  => ':attribute 过长',
        ];
    }

    /**
     * 获取验证错误的自定义属性
     *
     * @return array
     */
    public function attributes()
    {
        return [
            'name' => '标签名称StoreTag',
            'description' => '标签描述StoreTag',
        ];
    }

    /**
     * 验证后钩子
     *
     * @param  \Illuminate\Validation\Validator  $validator
     * @return void
     */
    /*public function withValidator($validator)
    {
        $validator->after(function ($validator) {
            if ($this->somethingElseIsInvalid()) {
                $validator->errors()->add('field', '验证后钩子 Something is wrong with this field!');
            }
        });
    }

    public function somethingElseIsInvalid()
    {
        return true;
    }*/
}
